package com.nepu.springboot.springbootdemo.controller;

import com.nepu.springboot.springbootdemo.bean.Customer;
import org.springframework.web.bind.annotation.*;

/**
 * @author chenshuaijun
 * @create 2022-11-05 17:25
 */
@RestController // 这个注解就相当于@controller+@ResponseBody--->这个注解的目的是将返回的数据转换成字符串
public class CustomerController {

    @RequestMapping("helloWorld")
    public String helloWorld(){
        return "hello world";
    }

    /**
     * 下面是对请求参数的讲解，请求参数是分成三种形式：
     * url后跟k-v
     * 拼接在url中
     * 封装在请求体中
     */

    /**
     * 第一种方式，在url后的跟上key=value
     * http://localhost:8080/paramKV?userName=zhangsan&password=123
     * @param userName 这个形参的名字，要和url中的key保持一致，要不然无法接收
     * @param password 这个形参的名字，要和url中的key保持一致，要不然无法接收
     * @return
     */
   @RequestMapping("paramKV")
    public String paramKV(String userName, String password){
       return "userName: " + userName + ", password: " + password;
   }

    /**
     * 第一种方式，在url后的跟上key=value
     * http://localhost:8080/paramKVOther?userName=zhangsan&password=123
     * 如果我们的形参名字不想和url中的key保持一致，可以换这种方式
     */
    @RequestMapping("paramKVOther")
    public String paramKVOther(@RequestParam("userName") String name, String password){
        return "userName: " + name + ", password: " + password;
    }

    /**
     * 第二种方式，将我们传递的值跟在url后面
     * http://localhost:8080/paramValueInUrl/lishi/123
     * @param userName 我们必须要使用@PathVariable这个注释进行指定，要不然，即使名字是一样的，也不能接收
     * @param password
     * @return
     */
    @RequestMapping("paramValueInUrl/{userName}/{password}")
    public String paramValueInUrl(@PathVariable("userName") String userName, @PathVariable("password")String password){
        return "userName: " + userName + ", password: " + password;
    }

    /**
     * 第三中参数携带的方式，它是将我们的数据封装到我们的请求体中
     * @param customer 请求体中的数据，来的时候是Json格式的，这里使用@RequestBody，会自动将数据解析成我们的bean对象
     * @return 返回bean对象的JSON
     */
    @RequestMapping("requestBodyInData")
    public Customer requestBodyInData(@RequestBody Customer customer){
        return customer;
    }
}
